const { Users } = require('../models/usersModel');
const jwt = require('jsonwebtoken');
const { TOKEN_KEY } = require('../ulities/consts');

//判断是否登录（管理员和销售员）
async function isAdminSalesLogin(req, res) {
  // console.log('进入isLogin方法');
  // 如果执行该方法,说明用户的token是有效的.

  // 获取请求头中传递的token字符串
  const auth = req.get('Authorization');
  // 拆分字符串,拿到真正的 token
  const token = auth.split(' ')[1];
  // 将 token 和 加密字符串同时传递给verify进行解码
  const { userName } = jwt.verify(token, TOKEN_KEY);
  res.send({
    status: 1,
    message: '用户已登录',
    data: userName,
  });
}
//用户登录
async function userLogin(req, res) {
  const { userName, password } = req.body;
  const data = await Users.find({
    userName,
    password,
  });

  if (data.length > 0) {
    const loginer = {
      _id: data[0]._id,
      userName: data[0].userName,
    };
    const token = jwt.sign(
      {
        userName,
      }, // 保存用户信息
      TOKEN_KEY, // 编码字符串
      {
        expiresIn: 60 * 1440,
      } // token 有效期(数字单位:s)
    );
    res.send({
      message: '用户登录成功',
      status: 1,
      token,
      loginer,
    });
  } else {
    res.send({
      message: '用户登录失败',
      type: 'LOGIN_FAILED',
      status: 0,
    });
  }
}
//查看所有客户
async function getAllUsers(req, res) {
  const { pageSize, currentPage } = req.body;
  // 总条数
  const total = await Users.countDocuments();
  // 总页数
  const totalPages = Math.ceil(total / pageSize);
  // 模糊查询
  const data = await Users.find()
    .limit(pageSize - 0) // 设置请求的条数
    .skip((currentPage - 1) * pageSize) // 设置跳过的条数
    .populate('salesmanId'); //关联
  // const data = await Admins.find()
  res.send({
    status: 1,
    data: { total, totalPages, data, pageSize, currentPage },
    // data,
    message: '用户数据获取成功',
  });
}
//删除客户
async function deleteOneUser(req, res) {
  const { _id } = req.body;
  try {
    const data = await Users.findByIdAndDelete(_id);

    if (data) {
      res.send({
        status: 1,
        message: '删除成功',
      });
    } else {
      res.send({
        status: 0,
        message: '删除失败',
      });
    }
  } catch (error) {
    console.log('删除失败', error);
    res.send({
      status: 0,
      message: '删除失败',
    });
  }
}
//获取我的所有客户
async function myUsersList(req, res) {
  const { pageSize, currentPage, _id } = req.body;
  // console.log(_id);
  // 总条数
  const total = await Users.countDocuments({ salesmanId: _id });
  // 总页数
  const totalPages = Math.ceil(total / pageSize);
  // 模糊查询
  const data = await Users.find({ salesmanId: _id })
    .limit(pageSize - 0) // 设置请求的条数
    .skip((currentPage - 1) * pageSize); // 设置跳过的条数
  // const data = await Users.find();
  // let data=list.filter(item=>item.salesmanId==_id);
  // console.log(111111, data);
  res.send({
    status: 1,
    data: { total, totalPages, data, pageSize, currentPage },
    // data,
    message: '数据获取成功',
  });
}
//新增客户
async function addUser(req, res) {
  const {
    userName,
    password,
    nickName,
    userType,
    phone,
    salesmanId,
  } = req.body;
  await Users.create({
    userName,
    password,
    nickName,
    userType,
    phone,
    salesmanId,
  });
  res.send({
    status: 1,
    message: '新增用户成功',
  });
}
///获得一个客户
async function getOneUser(req, res) {
  const { _id } = req.body;
  // console.log(_id);
  try {
    const data = await Users.findById(_id);
    // console.log(data);
    res.send({
      status: 1,
      data,
      message: '获取管理员成功',
    });
  } catch (error) {
    res.send({
      status: 0,
      message: '获取管理员失败',
    });
  }
}
//修改一个客户
async function updateOneUser(req, res) {
  const {
    _id,
    userName,
    password,
    nickName,
    userType,
    phone,
    salesmanId,
  } = req.body;
  await Users.updateOne(
    { _id },
    {
      userName,
      password,
      nickName,
      userType,
      phone,
      salesmanId,
    }
  );
  res.send({
    status: 1,
    message: '修改用户信息成功',
  });
}



module.exports = {
  isAdminSalesLogin,
  userLogin,
  getAllUsers,
  deleteOneUser,
  myUsersList,
  addUser,
  getOneUser,
  updateOneUser,
};
